/**
 * auth-check.js - 用户登录状态检查和验证模块
 * 
 * 主要功能：
 * 1. 检查用户的登录状态
 * 2. 处理需要登录验证的页面和元素
 * 3. 管理登录重定向流程
 * 
 * 使用方式：
 * 1. 在需要登录验证的页面引入此文件
 * 2. 为需要登录验证的元素添加 data-require-login="true" 属性
 * 3. 可选：为按钮添加 data-redirect 属性指定登录后的重定向URL
 */

/**
 * 全局登录状态检查函数
 * 检查用户是否已登录，如果未登录则跳转到登录页面
 * 
 * @param {Event} event - 触发检查的事件对象，用于阻止默认行为
 * @param {string} redirectUrl - 登录成功后重定向的URL
 * @returns {Promise<boolean>} - 返回用户是否已登录的Promise
 * 
 * 实现细节：
 * 1. 调用后端接口验证登录状态
 * 2. 未登录时保存当前页面URL用于登录后重定向
 * 3. 处理登录验证失败的情况
 */
async function checkLoginStatus(event, redirectUrl) {
    // 调用后端接口检查登录状态
    const loginStatus = await isLogin();
    
    // 如果未登录，执行以下步骤
    if (loginStatus.status !== 1) {
        // 如果存在事件对象，阻止默认行为（如链接跳转）
        if (event) event.preventDefault();
        
        // 获取重定向URL的优先级：
        // 1. 传入的redirectUrl参数
        // 2. 事件目标的href属性
        // 3. 当前页面的路径
        const targetUrl = redirectUrl || 
                         (event && event.target.getAttribute('href')) || 
                         window.location.pathname;
        
        // 将目标URL存储到localStorage，供登录成功后使用
        localStorage.setItem('redirectAfterLogin', targetUrl);
        
        // 提示用户并跳转到登录页
        alert('请先登录后再操作！');
        window.location.href = '/pages/auth/login.html';
        return false;
    }
    
    // 已登录则返回true
    return true;
}

/**
 * 为需要登录验证的元素添加检查功能
 * 自动为带有data-require-login属性的元素添加登录检查
 * 
 * 实现细节：
 * 1. 获取所有需要登录验证的元素
 * 2. 区分按钮和链接的处理方式
 * 3. 保存并处理原有的事件处理函数
 */
function addLoginCheck() {
    // 获取所有带有data-require-login="true"属性的元素
    const elements = document.querySelectorAll('[data-require-login="true"]');
    
    // 为每个元素添加点击事件处理
    elements.forEach(element => {
        // 保存元素原有的属性，以便登录后恢复
        const originalHref = element.getAttribute('href');
        const originalOnClick = element.onclick;
        
        // 根据元素类型添加不同的处理逻辑
        if (element.tagName.toLowerCase() === 'button') {
            // 按钮元素的处理
            // 获取按钮的重定向URL（优先使用data-redirect属性）
            const targetUrl = element.getAttribute('data-redirect') || originalHref;
            
            // 添加新的点击事件处理
            element.onclick = async function(e) {
                e.preventDefault();
                // 检查登录状态
                if (await checkLoginStatus(e, targetUrl)) {
                    // 已登录时，执行原有的点击事件或跳转
                    if (originalOnClick) {
                        return originalOnClick.call(this, e);
                    } else if (targetUrl) {
                        window.location.href = targetUrl;
                    }
                }
            };
        } else {
            // 链接元素的处理
            element.onclick = async function(e) {
                e.preventDefault();
                // 检查登录状态
                if (await checkLoginStatus(e, originalHref)) {
                    // 已登录时，执行原有的点击事件或跳转
                    if (originalOnClick) {
                        originalOnClick.call(this, e);
                    } else if (originalHref) {
                        window.location.href = originalHref;
                    }
                }
            };
        }
    });
}

// 当DOM加载完成后初始化登录检查
// 确保页面元素都已加载完成再添加登录验证
document.addEventListener('DOMContentLoaded', addLoginCheck); 